package com.baosight.risk.mapper.fltd;

import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Param;

import com.baosight.risk.base.mapper.BaseMapper;
import com.baosight.risk.service.fltd.entity.FltdTask;
import com.baosight.risk.service.fltd.vo.FltdTaskHistoryVO;
import com.baosight.risk.service.fltd.vo.FltdTaskVO;

/**
 * 作者： lishaoqing
 * 时间： 2019年07月15日
 * 描述： FltdTaskMapper
 * 版本: v1.0
 */
public interface FltdTaskMapper extends BaseMapper<FltdTask> {

    /**
     * 查询我的待办列表
     *
     * @return 待办列表
     */
    List<FltdTask> selectTodoTask(@Param("userCode") String userCode);

    /**
     * 查询我的已办列表
     *
     * @return 待办列表
     */
    List<FltdTask> selectFinishTask(@Param("userCode") String userCode);

    /**
     * 查询所有待办列表
     *
     * @return 待办列表
     */
    List<FltdTask> selectTaskList(@Param("param") FltdTaskVO param);

    /**
     * 查询我的待办条数
     *
     * @return 待办条数
     */
    int selectTaskCount(@Param("userCode") String userCode);

    /**
     * 查询我的消息条数
     *
     * @return 消息条数
     */
    int selectMessageCount(@Param("userCode") String userCode);

    /**
     * 查询所有人的消息列表
     * @return 消息列表
     */
    List<FltdTask> selectMessageList(@Param("param") FltdTaskVO param);

    /**
     * 查询我的未读消息列表
     *
     * @return 未读消息列表
     */
    List<FltdTask> selectUnReadList(@Param("userCode") String userCode);

    /**
     * 查询我的已读消息列表
     *
     * @return 已读消息列表
     */
    List<FltdTask> selectReadList(@Param("userCode") String userCode);

    /**
     * 查询所有人的待办
     * @return 所有人的待办
     */
    List<FltdTask> selectAllTaskList();

    /**
     * 查询合并前的待办列表
     *
     * @return 待办列表
     */
    List<FltdTask> selectGroupedTask(@Param("userCode") String userCode, @Param("flowNo") String flowNo, @Param("nodeCode") String nodeCode);

    /**
     * 查询指定节点上最后提交的待办
     *
     * @param procGuid 流程实例id
     * @param nodeCode 节点编码
     * @return 待办信息
     */
    FltdTask selectBeforeTask(@Param("procGuid") String procGuid, @Param("nodeCode") String nodeCode);

    /**
     * 查询要撤回的待办
     *
     * @param todoGuid 流程实例id
     * @param userCode 当前用户
     * @return 待办列表
     */
    List<FltdTask> selectCancelTask(@Param("todoGuid") String todoGuid, @Param("procGuid") String procGuid, @Param("userCode") String userCode);

    /**
     * 查询当前流程的审批历史
     *
     * @param procGuid 当前流程实例id
     * @return 审批历史
     */
    List<FltdTaskHistoryVO> selectHistory(@Param("procGuid") String procGuid);

    /**
     * 查询指定单位是否已经下发过待办
     *
     * @param fltdTask 参数
     * @return 待办
     */
    FltdTask selectExistTask(@Param("fltdTask") FltdTask fltdTask);

    /**
     * 查询指定重点风险id是否已启动过流程
     *
     * @param flowNo   流程编码
     * @param taskGuid 重点风险id
     * @param bizGuid  业务id
     * @return 流程实例id
     */
    String selectProcId(@Param("flowNo") String flowNo, @Param("taskGuid") String taskGuid, @Param("bizGuid") String bizGuid);

    /**
     * 修改待办状态
     *
     * @param fltdTask 待办信息
     * @return 执行结果
     */
    int updateTaskStatus(@Param("fltdTask") FltdTask fltdTask);

    /**
     * 查询我的任务列表
     *
     * @return 任务列表
     */
    List<FltdTask> selectOwnerTask(@Param("userCode") String userCode, @Param("bizName") String bizName, @Param("bizDesc") String bizDesc, @Param("acctYear") String acctYear, @Param("quarterCurrent") String quarterCurrent);

    /**
     * 根据条件查询待办信息
     *
     * @return 任务列表
     */
    List<FltdTask> queryTasks(@Param("flowNo") String flowNo, @Param("acctYear") String acctYear, @Param("quarterCode") String quarterCode, @Param("nodeCode") String nodeCode, @Param("deptList") List<String> deptList,@Param("manageCompCode") String manageCompCode);

    /**
     * 查询所有需要催办的待办记录
     *
     * @return 催办列表
     */
    List<FltdTask> selectUrgentTask();

    /**
     * 查询当前流程未处理的待办
     * @return 待办信息
     */
    List<FltdTask> selectCurrentTasks(@Param("procGuid") String procGuid, @Param("nodeCode") String nodeCode);

    /**
     * 查询当前节点是否可以提交（针对多人提交策略）
     * @param procGuid 流程实例id
     * @param nodeCode 当前节点编码
     * @param currUserCode 当前待办处理人
     *
     */
    Integer selectCanSubmit(@Param("procGuid") String procGuid, @Param("nodeCode") String nodeCode, @Param("currUserCode") String currUserCode);

    /**
     * 根据业务主键查询待办
     * @param bizGuid
     * @return
     */
    List<FltdTask> queryByGuid(@Param("bizGuid") String bizGuid);
    /**
     * 批量查询当前流程未处理的待办
     * @return 待办信息
     */
    List<FltdTask> selectBatchCurrentTasks(@Param("procGuid")String[] procGuid,@Param("nodeCode") String nodeCode);

    /**
     * 查询已开启的待办
     * @return
     */
    List<Map> selectOpenTask();

    List<FltdTask> queryByGuidAndNodeCode(@Param("bizGuid") String bizGuid ,@Param("nodeCode") String nodeCode);

    /**
     * 查询待办数据
     * @param param
     * @return
     */
    List<FltdTask> selectTaskListData(@Param("param") FltdTaskVO param);

    /**
     * 根据自动下发的流程代码查询待办数据
     * @param param
     * @return
     */
    List<FltdTask> selectTaskListInFlowNo(@Param("param") FltdTaskVO param);
    /**
     * 查询一个月内关闭的待办
     * @return
     */
    List<FltdTask> selectMothCloseTasks();
}